dojo.provide("lotex.api");


dojo.require("dojo.lang.declare");
dojo.require("dojo.collections.ArrayList");
dojo.require("dojo.io.*");

dojo.require("lotex.commond");
dojo.require("lotex.array");


dojo.declare("lotex.api.JSONResponse", null,
    function(json) {
        this.json=json;
    },
{
    message: function(){
        return this.json["message"];
    }
});

lotex.api.args = function(fn)
{
    // if fn.arguments.length==0
    var apiArgs = fn.arguments[0];
    if(dj_undef("args", apiArgs)){
        var LOTEX_API_ARGS=[];
        for(var i=0;i<fn.arguments.length;i++)
        {
            LOTEX_API_ARGS[i] = fn.arguments[i];
        }
        apiArgs = {};
        apiArgs.args = LOTEX_API_ARGS;
    }
    return apiArgs;
}

/******************************************************************************
 * 调用方式一:直接写入调用参数.
 *     lotex.api.save("strArg", 2, [1,2]);
 * 调用方式二:调用参数用对象包装,这种可以实现自定义onLoad等行为.
 *     lotex.api.save({
 *         args:["strArg", 2, [1,2]]
 *         load: function(response){}
 *     });
 * @see rptp.call
 ******************************************************************************/
lotex.api.save = function() {
    var apiArgs = lotex.api.args(lotex.api.save);
    // param "model" optional, may be for url secrity control
    apiArgs.url = lotexConfig.baseurl + "/api/save.do" //?model="+obj[0];

    lotex.api.call(apiArgs);
}

// @see lotex.api.save
lotex.api.get = function() {
    var apiArgs = lotex.api.args(lotex.api.get);
    // param "model" optional, may be for url secrity control
    apiArgs.url = lotexConfig.baseurl + "/api/get.do" //?model="+obj[0];

    lotex.api.call(apiArgs);
}

// @see lotex.api.save
lotex.api.form = function() {
    var apiArgs = lotex.api.args(lotex.api.form);
    // param "model" optional, may be for url secrity control
    apiArgs.url = lotexConfig.baseurl + "/api/form.do" //?model="+obj[0];

    lotex.api.call(apiArgs);
}

// @see sto.orz.webapp.action.json.SaveModelAction.java
/*******************************************************************************
 * apiArgs:
 *     args: 远程调用参数数组;
 *     url: 远程服务url;
 *     load: 调用成功回调函数;
 *     error: 无法调用回调函数;
 *
 ******************************************************************************/
lotex.api.call = function(apiArgs) {
    if((!apiArgs.load)&&(!dojo.lang.isFunction(apiArgs.load)))
        apiArgs.load = lotex.api.defaultOnLoad;

    if((!apiArgs.error)&&(!dojo.lang.isFunction(apiArgs.error)))
        apiArgs.error = lotex.api.defaultOnError;

    var content = "LOTEX_JSON_ARGS="+dojo.json.serialize(apiArgs.args);
    var kw = {
        url: apiArgs.url,
        method: "post",
        postContent: content,
        mimetype: "application/json",
        load: function(type, data, evt) {
            apiArgs.load(data);
        },
        error: function(t, e) {
            apiArgs.error(e);
        }
    };
    lotex.io.bind(kw);
}

// 可以重载该函数以改变默认onLoad行为
lotex.api.defaultOnLoad = function(response){
    if(response.done) {
        alert("POST OK");
        if(response.result) dd(response.result);
    } else {
        if(response.message) alert(response.message);
        else alert("Response not valid JSON!");
    }
}

// 可以重载该函数以改变默认onError行为
lotex.api.defaultOnError = function(error){
    alert(error);
}